package com.cast.gwt.receiver.client; import java.util.List; import com.google.gwt.core.client.JavaScriptObject; /** * This class originally from algaforge GWT wrapper around the Google Map API. * It has been extended to handle float attributes and other API * */ public class JavaScriptObjectHelper { private JavaScriptObjectHelper() { } public static native String getAttribute(JavaScriptObject elem, String attr) /*-{ var ret = elem[attr]; return (ret === undefined) ? null : String(ret); }-*/; public static native void setAttribute(JavaScriptObject elem, String attr, String value) /*-{ elem[attr] = value; }-*/; public static native JavaScriptObject getAttributeAsJavaScriptObject( JavaScriptObject elem, String attr) /*-{ var ret = elem[attr]; return (ret === undefined) ? null : ret; }-*/; public static native JavaScriptObject[] getAttributeAsJavaScriptObjectArray( JavaScriptObject elem, String attr) /*-{ var ret = elem[attr]; return (ret === undefined) ? null : ret; }-*/; public static native void setAttribute(JavaScriptObject elem, String attr, JavaScriptObject[] value) /*-{ elem[attr] = value; }-*/; public static native void setAttribute(JavaScriptObject elem, String attr, JavaScriptObject value) /*-{ elem[attr] = value; }-*/; public static native void setAttribute(JavaScriptObject elem, String attr, int value) /*-{ elem[attr] = value; }-*/; public static native void setAttribute(JavaScriptObject elem, String attr, boolean value) /*-{ elem[attr] = value; }-*/; public static native void setAttribute(JavaScriptObject elem, String attr, float value) /*-{ elem[attr] = value; }-*/; public static native int getAttributeAsInt(JavaScriptObject elem, String attr) /*-{ var ret = elem[attr]; return (ret === undefined) ? null : ret; }-*/; public static native float getAttributeAsFloat(JavaScriptObject elem, String attr) /*-{ var ret = elem[attr]; return (ret === undefined) ? null : ret; }-*/; public static int[] getAttributeAsIntArray(JavaScriptObject elem, String attr) { int[] rtn = null; JavaScriptObject hold = getAttributeAsJavaScriptObject(elem, attr); if (hold != null) { rtn = new int[getJavaScriptObjectArraySize(hold)]; for (int i = 0; i < rtn.length; i++) { rtn[i] = getIntValueFromJavaScriptObjectArray(hold, i); } } return rtn; } public static native int getJavaScriptObjectArraySize(JavaScriptObject elem) /*-{ if (elem) return elem.length; return 0; }-*/; public static native int getIntValueFromJavaScriptObjectArray( JavaScriptObject elem, int i) /*-{ return elem[i]; }-*/; public static native void setAttributeAsIntArray(JavaScriptObject elem, String attr, int[] value) /*-{ elem[attr] = value; }-*/; public static native boolean getAttributeAsBoolean(JavaScriptObject elem, String attr) /*-{ var ret = elem[attr]; return (ret === undefined) ? null : ret; }-*/; /** * Helper function to create [] array from List. * * @param list * * @return array of objects */ public static JavaScriptObject[] listToArray(List list) { JavaScriptObject[] array = new JavaScriptObject[list.size()]; for (int i = 0; i < array.length; i++) { array[i] = (JavaScriptObject) list.get(i); } return array; } public static JavaScriptObject arrayConvert(Object[] array) { JavaScriptObject result = newJSArray(array.length); for (int i = 0; i < array.length; i++) { arraySet(result, i, array[i]); } return result; } public static JavaScriptObject arrayConvert(JavaScriptObject[] array) { JavaScriptObject result = newJSArray(array.length); for (int i = 0; i < array.length; i++) { arraySet(result, i, array[i]); } return result; } private static native JavaScriptObject newJSArray(int length) /*-{ if (length < 0) { return new Array(); } else { return new Array(length); } }-*/; public static native int arrayLength(JavaScriptObject array) /*-{ return array.length; }-*/; public static native Object arrayGetObject(JavaScriptObject array, int index) /*-{ return array[index]; }-*/; public static native void arraySet(JavaScriptObject array, int index, Object value) /*-{ array[index] = value; }-*/; public static native void arraySet(JavaScriptObject array, int index, JavaScriptObject value) /*-{ array[index] = value; }-*/; }